home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / u_man / cat1 / ddopt.z / ddopt
Encoding:
Text File  |  1998-10-30  |  11.2 KB  |  265 lines

  1.  
  2.  
  3.  
  4. DDDDDDDDOOOOPPPPTTTT((((1111))))                                                              DDDDDDDDOOOOPPPPTTTT((((1111))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      ddopt - MIPS Data-Dependency-based Optimizer
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      ddddddddoooopppptttt _u_n_o_p_t__f_i_l_e _o_p_t__f_i_l_e [ ----vvvv ----mmmmiiiippppssss3333 ----hhhhoooossssttttccccaaaacccchhhheeee ----ccccaaaacccchhhheeeesssszzzz  ssssiiiizzzzeeee ]
  13.  
  14. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  15.      ddddddddoooopppptttt,,,, the MIPS _d_a_t_a-_d_e_p_e_n_d_e_n_c_y-_b_a_s_e_d optimizer, reads the input binary
  16.      ucode file on a procedure by procedure basis, performs loop-based
  17.      transformations on each outer-most loop nest in each procedure and
  18.      outputs the optimized binary ucode file.  By convention, it takes a
  19.      binary ucode file with the extensions .B or .M as input and output a
  20.      binary ucode file with the extension .D.  In the compilation process,
  21.      ddddddddoooopppptttt runs after the front-end, after uld and usplit, and before umerge,
  22.      uopt and ugen.  Currently, ddddddddoooopppptttt only takes ucode files generated from
  23.      FORTRAN.
  24.  
  25.      ddddddddoooopppptttt borrows optimization techniques that originated from compilers for
  26.      supercomputers and adapts them to apply to scalar machines.  It performs
  27.      high-level analysis on the behavior of array accesses in loops, deriving
  28.      what we call data dependency information.  Numerous optimization
  29.      transformations on the program code are performed based on such
  30.      information (and thus the name ddddddddoooopppptttt )))).... The transformations are
  31.      invariantly associated with program loops that operate on arrays.
  32.  
  33.      There are different kinds of transformations performed by ddddddddoooopppptttt that
  34.      benefit program performance:
  35.  
  36.      1. Those that reduce memory references.  Techniques include re-using
  37.      array references that have been allocated to register (register
  38.      allocation for array references) and moving array references and
  39.      assignments outside loops.
  40.  
  41.      2. Those that improve locality of memory references (thus reducing data
  42.      cache misses).  Techniques include changing the order of loop nests (loop
  43.      interchange) and partitioning loop iterations to operate on smaller
  44.      sections of array (strip-mining).
  45.  
  46.      3. Those that reduce floating-point interlocks and promote greater
  47.      parallelism among floating-point operations by promoting larger pieces of
  48.      straight-line code in loops.  Techniques include unrolling and
  49.      unrolling-and-jam (unroll outer loop and jam the resulting copies of the
  50.      inner loop into one bigger loop).
  51.  
  52.      There are other optimizations that ddopt does just to bring in more
  53.      opportunities for doing the above transformations:  local common
  54.      subexpression, secondary index variable elimination, constant
  55.      propagation, copy propagation, constant folding, jump folding and dead
  56.      code elimination.  Some of these optimizations duplicate the
  57.      optimizations performed in uuuuoooopppptttt .... These optimizations are applied
  58.      iteratively until there is no more change to the code, and they precedes
  59.      the data-dependency-based analyses and transformations.
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. DDDDDDDDOOOOPPPPTTTT((((1111))))                                                              DDDDDDDDOOOOPPPPTTTT((((1111))))
  71.  
  72.  
  73.  
  74.      The following options are interpreted by ddddddddoooopppptttt.... Options starting with ----XXXX
  75.      are not recognized by the compiler driver, and have to be passed to ddopt
  76.      via ----WWWWdddd,,,,............ ....
  77.  
  78.      ----vvvv      Turns on verbose mode.  In this mode, ddopt will print the name
  79.              of the procedure it is currently optimizing.
  80.  
  81.      ----mmmmiiiippppssss3333  Tells ddddddddoooopppptttt that the target machine uses the MIPS3 instruction
  82.              set.
  83.  
  84.      ----hhhhoooossssttttccccaaaacccchhhheeee
  85.              Tells ddddddddoooopppptttt to assume that the target machine has the same data
  86.              cache size as the host machine, so it can find out the cache size
  87.              via system call.
  88.  
  89.      ----ccccaaaacccchhhheeeesssszzzz  ssssiiiizzzzeeee
  90.              Gives ddddddddoooopppptttt the data cache size of the target machine, in bytes.
  91.              The default is 8192 bytes.
  92.  
  93.      ----XXXXbbbbllllddddggggrrrr Dumps the data dependency information computed, for debugging
  94.              purpose.
  95.  
  96.      ----XXXXbbbbbbbbooooppppttttooooffffffff
  97.              Turns off the conventional global optimizations that precede the
  98.              data-dependency-related transformations.
  99.  
  100.      ----XXXXbbbbffff  ssssiiiizzzzeeee
  101.              Changes the blocking factor used by ddddddddoooopppptttt in strip-mining.  The
  102.              default is 36 bytes.
  103.  
  104.      ----XXXXdddduuuummmmpppp  Tells ddddddddoooopppptttt to dump the original and transformed program in a
  105.              compact, close-to-source-level format.
  106.  
  107.      ----XXXXddddoooossssiiiizzzzeeeetttthhhhrrrreeeesssshhhhoooolllldddd  ccccoooouuuunnnntttt
  108.              If the number of statements in a DO loop exceeds this number,
  109.              that DO loop is excluded from transformation by ddddddddoooopppptttt.... The
  110.              default is 150.
  111.  
  112.      ----XXXXggggccccooooppppyyyyooooffffffff
  113.              Turns off global copy propagation.
  114.  
  115.      ----XXXXiiiinnnntttteeeerrrrooooffffffff
  116.              Turns off loop interchange.
  117.  
  118.      ----XXXXiiiinnnnddddeeeepppprrrreeeeggggooooffffffff
  119.              Turns off loop-independent dependence register allocation.
  120.  
  121.      ----XXXXiiiinnnnppppuuuuttttrrrreeeeggggooooffffffff
  122.              Turns off input dependence register allocation.
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. DDDDDDDDOOOOPPPPTTTT((((1111))))                                                              DDDDDDDDOOOOPPPPTTTT((((1111))))
  137.  
  138.  
  139.  
  140.      ----XXXXiiiinnnnvvvvaaaarrrrrrrreeeeggggooooffffffff
  141.              Turns off loop-invariant register allocation.
  142.  
  143.      ----XXXXllllccccooooppppyyyyooooffffffff
  144.              Turns off local copy propagation.
  145.  
  146.      ----XXXXmmmmeeeerrrrggggeeeeppppiiiibbbblllloooocccckkkkooooffffffff
  147.              Disallows the merging of pi-blocks created for statements in the
  148.              same basic blocks.
  149.  
  150.      ----XXXXmmmmoooorrrreeeeuuuunnnnrrrroooolllllllljjjjaaaammmm
  151.              By default, unroll-and-jam are performed only on inner loop nests
  152.              that come out of strip-mining. This flag removes this restriction
  153.              and tells ddddddddoooopppptttt to do unroll-and-jam whenever it thinks it is
  154.              advantageous.
  155.  
  156.      ----XXXXmmmmaaaaxxxx____iiiinnnntttt____rrrreeeeggggssss
  157.              Tells ddddddddoooopppptttt the number of integer registers available in the
  158.              underlying machine.  The default is 32.
  159.  
  160.      ----XXXXmmmmaaaaxxxx____ffffllllooooaaaatttt____rrrreeeeggggssss
  161.              Tells ddddddddoooopppptttt the number of floating-point registers available in
  162.              the underlying machine.  The default is 16.
  163.  
  164.      ----XXXXooooffffffffffffoooooooo
  165.              Turns off all transformation for the given procedure name ("foo"
  166.              in this case).
  167.  
  168.      ----XXXXoooouuuuttttppppuuuuttttrrrreeeeggggooooffffffff
  169.              Turns off output dependence register allocation.
  170.  
  171.      ----XXXXoooovvvveeeerrrraaaallllllllooooccccaaaatttteeee
  172.              Tells ddddddddoooopppptttt to perform register allocation without regard to the
  173.              number of registers available in the underlying machine.
  174.  
  175.      ----XXXXssssttttrrrriiiippppooooffffffff
  176.              Turns off strip-mining.
  177.  
  178.      ----XXXXssssttttrrrriiiippppoooonnnnllllyyyy
  179.              Tells ddddddddoooopppptttt to perform strip-mining but prevent the newly-formed
  180.              loops from being interchanged into a deeper region of the loop
  181.              nest, for debugging purpose only.
  182.  
  183.      ----XXXXssssttttaaaatttt  Prints optimization statistics to give line numbers and number of
  184.              times various transformations were applied.
  185.  
  186.      ----XXXXttttrrrruuuueeeerrrreeeeggggooooffffffff
  187.              Turns off true dependence register allocation.
  188.  
  189.      ----XXXXuuuunnnnrrrroooollllllllooooffffffff
  190.              Turns off loop unrolling.
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. DDDDDDDDOOOOPPPPTTTT((((1111))))                                                              DDDDDDDDOOOOPPPPTTTT((((1111))))
  203.  
  204.  
  205.  
  206.      ----XXXXuuuunnnnrrrroooolllllllljjjjaaaammmmooooffffffff
  207.              Turns off unroll-and-jam.
  208.  
  209.      ----XXXXuuuunnnnrrrroooolllllllltttthhhhrrrreeeesssshhhhoooolllldddd  ccccoooouuuunnnntttt
  210.              Sets the threshold that limits the extent to which unrolling can
  211.              be performed without causing the number of statements in the loop
  212.              to exceed this number.  The default is 180.
  213.  
  214.      ----XXXXuuuunnnnrrrroooollllllllttttiiiimmmmeeeessss  ccccoooouuuunnnntttt
  215.              Sets the maximum number of times to unroll a loop.  The default
  216.              is 4.
  217.  
  218. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  219.      _u_c_o_d_e(1), _u_o_p_t(1), _b_t_o_u(1), _p_p_u(1),
  220.  
  221. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
  222.      ddddddddoooopppptttt assumes the input ucode file is error-free.
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.